home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / string_tests.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  27KB  |  933 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''
  5. Common tests shared by test_str, test_unicode, test_userstring and test_string.
  6. '''
  7. import unittest
  8. import string
  9. import sys
  10. from test import test_support
  11. from UserList import UserList
  12.  
  13. class Sequence:
  14.     
  15.     def __init__(self, seq = 'wxyz'):
  16.         self.seq = seq
  17.  
  18.     
  19.     def __len__(self):
  20.         return len(self.seq)
  21.  
  22.     
  23.     def __getitem__(self, i):
  24.         return self.seq[i]
  25.  
  26.  
  27.  
  28. class BadSeq1(Sequence):
  29.     
  30.     def __init__(self):
  31.         self.seq = [
  32.             7,
  33.             'hello',
  34.             0x7BL]
  35.  
  36.  
  37.  
  38. class BadSeq2(Sequence):
  39.     
  40.     def __init__(self):
  41.         self.seq = [
  42.             'a',
  43.             'b',
  44.             'c']
  45.  
  46.     
  47.     def __len__(self):
  48.         return 8
  49.  
  50.  
  51.  
  52. class CommonTest(unittest.TestCase):
  53.     type2test = None
  54.     
  55.     def fixtype(self, obj):
  56.         if isinstance(obj, str):
  57.             return self.__class__.type2test(obj)
  58.         elif isinstance(obj, list):
  59.             return [ self.fixtype(x) for x in obj ]
  60.         elif isinstance(obj, tuple):
  61.             return []([ self.fixtype(x) for x in obj ])
  62.         elif isinstance(obj, dict):
  63.             return []([ (self.fixtype(key), self.fixtype(value)) for key, value in obj.iteritems() ])
  64.         else:
  65.             return obj
  66.  
  67.     
  68.     def checkequal(self, result, object, methodname, *args):
  69.         result = self.fixtype(result)
  70.         object = self.fixtype(object)
  71.         args = self.fixtype(args)
  72.         realresult = getattr(object, methodname)(*args)
  73.         self.assertEqual(result, realresult)
  74.         if object == realresult:
  75.             
  76.             class subtype(self.__class__.type2test):
  77.                 pass
  78.  
  79.             object = subtype(object)
  80.             realresult = getattr(object, methodname)(*args)
  81.             self.assert_(object is not realresult)
  82.         
  83.  
  84.     
  85.     def checkraises(self, exc, object, methodname, *args):
  86.         object = self.fixtype(object)
  87.         args = self.fixtype(args)
  88.         self.assertRaises(exc, getattr(object, methodname), *args)
  89.  
  90.     
  91.     def checkcall(self, object, methodname, *args):
  92.         object = self.fixtype(object)
  93.         args = self.fixtype(args)
  94.         getattr(object, methodname)(*args)
  95.  
  96.     
  97.     def test_hash(self):
  98.         a = self.type2test('DNSSEC')
  99.         b = self.type2test('')
  100.         for c in a:
  101.             b += c
  102.             hash(b)
  103.         
  104.         self.assertEqual(hash(a), hash(b))
  105.  
  106.     
  107.     def test_capitalize(self):
  108.         self.checkequal(' hello ', ' hello ', 'capitalize')
  109.         self.checkequal('Hello ', 'Hello ', 'capitalize')
  110.         self.checkequal('Hello ', 'hello ', 'capitalize')
  111.         self.checkequal('Aaaa', 'aaaa', 'capitalize')
  112.         self.checkequal('Aaaa', 'AaAa', 'capitalize')
  113.         self.checkraises(TypeError, 'hello', 'capitalize', 42)
  114.  
  115.     
  116.     def test_count(self):
  117.         self.checkequal(3, 'aaa', 'count', 'a')
  118.         self.checkequal(0, 'aaa', 'count', 'b')
  119.         self.checkequal(3, 'aaa', 'count', 'a')
  120.         self.checkequal(0, 'aaa', 'count', 'b')
  121.         self.checkequal(3, 'aaa', 'count', 'a')
  122.         self.checkequal(0, 'aaa', 'count', 'b')
  123.         self.checkequal(0, 'aaa', 'count', 'b')
  124.         self.checkequal(1, 'aaa', 'count', 'a', -1)
  125.         self.checkequal(3, 'aaa', 'count', 'a', -10)
  126.         self.checkequal(2, 'aaa', 'count', 'a', 0, -1)
  127.         self.checkequal(0, 'aaa', 'count', 'a', 0, -10)
  128.         self.checkraises(TypeError, 'hello', 'count')
  129.         self.checkraises(TypeError, 'hello', 'count', 42)
  130.  
  131.     
  132.     def test_find(self):
  133.         self.checkequal(0, 'abcdefghiabc', 'find', 'abc')
  134.         self.checkequal(9, 'abcdefghiabc', 'find', 'abc', 1)
  135.         self.checkequal(-1, 'abcdefghiabc', 'find', 'def', 4)
  136.         self.checkraises(TypeError, 'hello', 'find')
  137.         self.checkraises(TypeError, 'hello', 'find', 42)
  138.  
  139.     
  140.     def test_rfind(self):
  141.         self.checkequal(9, 'abcdefghiabc', 'rfind', 'abc')
  142.         self.checkequal(12, 'abcdefghiabc', 'rfind', '')
  143.         self.checkequal(0, 'abcdefghiabc', 'rfind', 'abcd')
  144.         self.checkequal(-1, 'abcdefghiabc', 'rfind', 'abcz')
  145.         self.checkraises(TypeError, 'hello', 'rfind')
  146.         self.checkraises(TypeError, 'hello', 'rfind', 42)
  147.  
  148.     
  149.     def test_index(self):
  150.         self.checkequal(0, 'abcdefghiabc', 'index', '')
  151.         self.checkequal(3, 'abcdefghiabc', 'index', 'def')
  152.         self.checkequal(0, 'abcdefghiabc', 'index', 'abc')
  153.         self.checkequal(9, 'abcdefghiabc', 'index', 'abc', 1)
  154.         self.checkraises(ValueError, 'abcdefghiabc', 'index', 'hib')
  155.         self.checkraises(ValueError, 'abcdefghiab', 'index', 'abc', 1)
  156.         self.checkraises(ValueError, 'abcdefghi', 'index', 'ghi', 8)
  157.         self.checkraises(ValueError, 'abcdefghi', 'index', 'ghi', -1)
  158.         self.checkraises(TypeError, 'hello', 'index')
  159.         self.checkraises(TypeError, 'hello', 'index', 42)
  160.  
  161.     
  162.     def test_rindex(self):
  163.         self.checkequal(12, 'abcdefghiabc', 'rindex', '')
  164.         self.checkequal(3, 'abcdefghiabc', 'rindex', 'def')
  165.         self.checkequal(9, 'abcdefghiabc', 'rindex', 'abc')
  166.         self.checkequal(0, 'abcdefghiabc', 'rindex', 'abc', 0, -1)
  167.         self.checkraises(ValueError, 'abcdefghiabc', 'rindex', 'hib')
  168.         self.checkraises(ValueError, 'defghiabc', 'rindex', 'def', 1)
  169.         self.checkraises(ValueError, 'defghiabc', 'rindex', 'abc', 0, -1)
  170.         self.checkraises(ValueError, 'abcdefghi', 'rindex', 'ghi', 0, 8)
  171.         self.checkraises(ValueError, 'abcdefghi', 'rindex', 'ghi', 0, -1)
  172.         self.checkraises(TypeError, 'hello', 'rindex')
  173.         self.checkraises(TypeError, 'hello', 'rindex', 42)
  174.  
  175.     
  176.     def test_lower(self):
  177.         self.checkequal('hello', 'HeLLo', 'lower')
  178.         self.checkequal('hello', 'hello', 'lower')
  179.         self.checkraises(TypeError, 'hello', 'lower', 42)
  180.  
  181.     
  182.     def test_upper(self):
  183.         self.checkequal('HELLO', 'HeLLo', 'upper')
  184.         self.checkequal('HELLO', 'HELLO', 'upper')
  185.         self.checkraises(TypeError, 'hello', 'upper', 42)
  186.  
  187.     
  188.     def test_expandtabs(self):
  189.         self.checkequal('abc\rab      def\ng       hi', 'abc\rab\tdef\ng\thi', 'expandtabs')
  190.         self.checkequal('abc\rab      def\ng       hi', 'abc\rab\tdef\ng\thi', 'expandtabs', 8)
  191.         self.checkequal('abc\rab  def\ng   hi', 'abc\rab\tdef\ng\thi', 'expandtabs', 4)
  192.         self.checkequal('abc\r\nab  def\ng   hi', 'abc\r\nab\tdef\ng\thi', 'expandtabs', 4)
  193.         self.checkequal('abc\rab      def\ng       hi', 'abc\rab\tdef\ng\thi', 'expandtabs')
  194.         self.checkequal('abc\rab      def\ng       hi', 'abc\rab\tdef\ng\thi', 'expandtabs', 8)
  195.         self.checkequal('abc\r\nab\r\ndef\ng\r\nhi', 'abc\r\nab\r\ndef\ng\r\nhi', 'expandtabs', 4)
  196.         self.checkraises(TypeError, 'hello', 'expandtabs', 42, 42)
  197.  
  198.     
  199.     def test_split(self):
  200.         self.checkequal([
  201.             'this',
  202.             'is',
  203.             'the',
  204.             'split',
  205.             'function'], 'this is the split function', 'split')
  206.         self.checkequal([
  207.             'a',
  208.             'b',
  209.             'c',
  210.             'd'], 'a b c d ', 'split')
  211.         self.checkequal([
  212.             'a',
  213.             'b c d'], 'a b c d', 'split', None, 1)
  214.         self.checkequal([
  215.             'a',
  216.             'b',
  217.             'c d'], 'a b c d', 'split', None, 2)
  218.         self.checkequal([
  219.             'a',
  220.             'b',
  221.             'c',
  222.             'd'], 'a b c d', 'split', None, 3)
  223.         self.checkequal([
  224.             'a',
  225.             'b',
  226.             'c',
  227.             'd'], 'a b c d', 'split', None, 4)
  228.         self.checkequal([
  229.             'a b c d'], 'a b c d', 'split', None, 0)
  230.         self.checkequal([
  231.             'a',
  232.             'b',
  233.             'c  d'], 'a  b  c  d', 'split', None, 2)
  234.         self.checkequal([
  235.             'a',
  236.             'b',
  237.             'c',
  238.             'd'], 'a|b|c|d', 'split', '|')
  239.         self.checkequal([
  240.             'a',
  241.             'b|c|d'], 'a|b|c|d', 'split', '|', 1)
  242.         self.checkequal([
  243.             'a',
  244.             'b',
  245.             'c|d'], 'a|b|c|d', 'split', '|', 2)
  246.         self.checkequal([
  247.             'a',
  248.             'b',
  249.             'c',
  250.             'd'], 'a|b|c|d', 'split', '|', 3)
  251.         self.checkequal([
  252.             'a',
  253.             'b',
  254.             'c',
  255.             'd'], 'a|b|c|d', 'split', '|', 4)
  256.         self.checkequal([
  257.             'a|b|c|d'], 'a|b|c|d', 'split', '|', 0)
  258.         self.checkequal([
  259.             'a',
  260.             '',
  261.             'b||c||d'], 'a||b||c||d', 'split', '|', 2)
  262.         self.checkequal([
  263.             'endcase ',
  264.             ''], 'endcase |', 'split', '|')
  265.         self.checkequal([
  266.             'a',
  267.             '',
  268.             'b\x00c\x00d'], 'a\x00\x00b\x00c\x00d', 'split', '\x00', 2)
  269.         self.checkequal([
  270.             'a',
  271.             'b',
  272.             'c',
  273.             'd'], 'a//b//c//d', 'split', '//')
  274.         self.checkequal([
  275.             'a',
  276.             'b//c//d'], 'a//b//c//d', 'split', '//', 1)
  277.         self.checkequal([
  278.             'a',
  279.             'b',
  280.             'c//d'], 'a//b//c//d', 'split', '//', 2)
  281.         self.checkequal([
  282.             'a',
  283.             'b',
  284.             'c',
  285.             'd'], 'a//b//c//d', 'split', '//', 3)
  286.         self.checkequal([
  287.             'a',
  288.             'b',
  289.             'c',
  290.             'd'], 'a//b//c//d', 'split', '//', 4)
  291.         self.checkequal([
  292.             'a//b//c//d'], 'a//b//c//d', 'split', '//', 0)
  293.         self.checkequal([
  294.             'a',
  295.             '',
  296.             'b////c////d'], 'a////b////c////d', 'split', '//', 2)
  297.         self.checkequal([
  298.             'endcase ',
  299.             ''], 'endcase test', 'split', 'test')
  300.         self.checkequal([
  301.             u'a',
  302.             u'b',
  303.             u'c d'], 'a b c d', 'split', u' ', 2)
  304.         self.checkraises(TypeError, 'hello', 'split', 42, 42, 42)
  305.  
  306.     
  307.     def test_rsplit(self):
  308.         self.checkequal([
  309.             'this',
  310.             'is',
  311.             'the',
  312.             'rsplit',
  313.             'function'], 'this is the rsplit function', 'rsplit')
  314.         self.checkequal([
  315.             'a',
  316.             'b',
  317.             'c',
  318.             'd'], 'a b c d ', 'rsplit')
  319.         self.checkequal([
  320.             'a b c',
  321.             'd'], 'a b c d', 'rsplit', None, 1)
  322.         self.checkequal([
  323.             'a b',
  324.             'c',
  325.             'd'], 'a b c d', 'rsplit', None, 2)
  326.         self.checkequal([
  327.             'a',
  328.             'b',
  329.             'c',
  330.             'd'], 'a b c d', 'rsplit', None, 3)
  331.         self.checkequal([
  332.             'a',
  333.             'b',
  334.             'c',
  335.             'd'], 'a b c d', 'rsplit', None, 4)
  336.         self.checkequal([
  337.             'a b c d'], 'a b c d', 'rsplit', None, 0)
  338.         self.checkequal([
  339.             'a  b',
  340.             'c',
  341.             'd'], 'a  b  c  d', 'rsplit', None, 2)
  342.         self.checkequal([
  343.             'a',
  344.             'b',
  345.             'c',
  346.             'd'], 'a|b|c|d', 'rsplit', '|')
  347.         self.checkequal([
  348.             'a|b|c',
  349.             'd'], 'a|b|c|d', 'rsplit', '|', 1)
  350.         self.checkequal([
  351.             'a|b',
  352.             'c',
  353.             'd'], 'a|b|c|d', 'rsplit', '|', 2)
  354.         self.checkequal([
  355.             'a',
  356.             'b',
  357.             'c',
  358.             'd'], 'a|b|c|d', 'rsplit', '|', 3)
  359.         self.checkequal([
  360.             'a',
  361.             'b',
  362.             'c',
  363.             'd'], 'a|b|c|d', 'rsplit', '|', 4)
  364.         self.checkequal([
  365.             'a|b|c|d'], 'a|b|c|d', 'rsplit', '|', 0)
  366.         self.checkequal([
  367.             'a||b||c',
  368.             '',
  369.             'd'], 'a||b||c||d', 'rsplit', '|', 2)
  370.         self.checkequal([
  371.             '',
  372.             ' begincase'], '| begincase', 'rsplit', '|')
  373.         self.checkequal([
  374.             'a\x00\x00b',
  375.             'c',
  376.             'd'], 'a\x00\x00b\x00c\x00d', 'rsplit', '\x00', 2)
  377.         self.checkequal([
  378.             'a',
  379.             'b',
  380.             'c',
  381.             'd'], 'a//b//c//d', 'rsplit', '//')
  382.         self.checkequal([
  383.             'a//b//c',
  384.             'd'], 'a//b//c//d', 'rsplit', '//', 1)
  385.         self.checkequal([
  386.             'a//b',
  387.             'c',
  388.             'd'], 'a//b//c//d', 'rsplit', '//', 2)
  389.         self.checkequal([
  390.             'a',
  391.             'b',
  392.             'c',
  393.             'd'], 'a//b//c//d', 'rsplit', '//', 3)
  394.         self.checkequal([
  395.             'a',
  396.             'b',
  397.             'c',
  398.             'd'], 'a//b//c//d', 'rsplit', '//', 4)
  399.         self.checkequal([
  400.             'a//b//c//d'], 'a//b//c//d', 'rsplit', '//', 0)
  401.         self.checkequal([
  402.             'a////b////c',
  403.             '',
  404.             'd'], 'a////b////c////d', 'rsplit', '//', 2)
  405.         self.checkequal([
  406.             '',
  407.             ' begincase'], 'test begincase', 'rsplit', 'test')
  408.         self.checkequal([
  409.             u'a b',
  410.             u'c',
  411.             u'd'], 'a b c d', 'rsplit', u' ', 2)
  412.         self.checkraises(TypeError, 'hello', 'rsplit', 42, 42, 42)
  413.  
  414.     
  415.     def test_strip(self):
  416.         self.checkequal('hello', '   hello   ', 'strip')
  417.         self.checkequal('hello   ', '   hello   ', 'lstrip')
  418.         self.checkequal('   hello', '   hello   ', 'rstrip')
  419.         self.checkequal('hello', 'hello', 'strip')
  420.         self.checkequal('hello', '   hello   ', 'strip', None)
  421.         self.checkequal('hello   ', '   hello   ', 'lstrip', None)
  422.         self.checkequal('   hello', '   hello   ', 'rstrip', None)
  423.         self.checkequal('hello', 'hello', 'strip', None)
  424.         self.checkequal('hello', 'xyzzyhelloxyzzy', 'strip', 'xyz')
  425.         self.checkequal('helloxyzzy', 'xyzzyhelloxyzzy', 'lstrip', 'xyz')
  426.         self.checkequal('xyzzyhello', 'xyzzyhelloxyzzy', 'rstrip', 'xyz')
  427.         self.checkequal('hello', 'hello', 'strip', 'xyz')
  428.         if test_support.have_unicode:
  429.             self.checkequal(unicode('hello', 'ascii'), 'xyzzyhelloxyzzy', 'strip', unicode('xyz', 'ascii'))
  430.             self.checkequal(unicode('helloxyzzy', 'ascii'), 'xyzzyhelloxyzzy', 'lstrip', unicode('xyz', 'ascii'))
  431.             self.checkequal(unicode('xyzzyhello', 'ascii'), 'xyzzyhelloxyzzy', 'rstrip', unicode('xyz', 'ascii'))
  432.             self.checkequal(unicode('hello', 'ascii'), 'hello', 'strip', unicode('xyz', 'ascii'))
  433.         
  434.         self.checkraises(TypeError, 'hello', 'strip', 42, 42)
  435.         self.checkraises(TypeError, 'hello', 'lstrip', 42, 42)
  436.         self.checkraises(TypeError, 'hello', 'rstrip', 42, 42)
  437.  
  438.     
  439.     def test_ljust(self):
  440.         self.checkequal('abc       ', 'abc', 'ljust', 10)
  441.         self.checkequal('abc   ', 'abc', 'ljust', 6)
  442.         self.checkequal('abc', 'abc', 'ljust', 3)
  443.         self.checkequal('abc', 'abc', 'ljust', 2)
  444.         self.checkequal('abc*******', 'abc', 'ljust', 10, '*')
  445.         self.checkraises(TypeError, 'abc', 'ljust')
  446.  
  447.     
  448.     def test_rjust(self):
  449.         self.checkequal('       abc', 'abc', 'rjust', 10)
  450.         self.checkequal('   abc', 'abc', 'rjust', 6)
  451.         self.checkequal('abc', 'abc', 'rjust', 3)
  452.         self.checkequal('abc', 'abc', 'rjust', 2)
  453.         self.checkequal('*******abc', 'abc', 'rjust', 10, '*')
  454.         self.checkraises(TypeError, 'abc', 'rjust')
  455.  
  456.     
  457.     def test_center(self):
  458.         self.checkequal('   abc    ', 'abc', 'center', 10)
  459.         self.checkequal(' abc  ', 'abc', 'center', 6)
  460.         self.checkequal('abc', 'abc', 'center', 3)
  461.         self.checkequal('abc', 'abc', 'center', 2)
  462.         self.checkequal('***abc****', 'abc', 'center', 10, '*')
  463.         self.checkraises(TypeError, 'abc', 'center')
  464.  
  465.     
  466.     def test_swapcase(self):
  467.         self.checkequal('hEllO CoMPuTErS', 'HeLLo cOmpUteRs', 'swapcase')
  468.         self.checkraises(TypeError, 'hello', 'swapcase', 42)
  469.  
  470.     
  471.     def test_replace(self):
  472.         self.checkequal('one@two!three!', 'one!two!three!', 'replace', '!', '@', 1)
  473.         self.checkequal('onetwothree', 'one!two!three!', 'replace', '!', '')
  474.         self.checkequal('one@two@three!', 'one!two!three!', 'replace', '!', '@', 2)
  475.         self.checkequal('one@two@three@', 'one!two!three!', 'replace', '!', '@', 3)
  476.         self.checkequal('one@two@three@', 'one!two!three!', 'replace', '!', '@', 4)
  477.         self.checkequal('one!two!three!', 'one!two!three!', 'replace', '!', '@', 0)
  478.         self.checkequal('one@two@three@', 'one!two!three!', 'replace', '!', '@')
  479.         self.checkequal('one!two!three!', 'one!two!three!', 'replace', 'x', '@')
  480.         self.checkequal('one!two!three!', 'one!two!three!', 'replace', 'x', '@', 2)
  481.         self.checkequal('-a-b-c-', 'abc', 'replace', '', '-')
  482.         self.checkequal('-a-b-c', 'abc', 'replace', '', '-', 3)
  483.         self.checkequal('abc', 'abc', 'replace', '', '-', 0)
  484.         self.checkequal('', '', 'replace', '', '')
  485.         self.checkequal('abc', 'abc', 'replace', 'ab', '--', 0)
  486.         self.checkequal('abc', 'abc', 'replace', 'xy', '--')
  487.         self.checkequal('', '123', 'replace', '123', '')
  488.         self.checkequal('', '123123', 'replace', '123', '')
  489.         self.checkequal('x', '123x123', 'replace', '123', '')
  490.         self.checkraises(TypeError, 'hello', 'replace')
  491.         self.checkraises(TypeError, 'hello', 'replace', 42)
  492.         self.checkraises(TypeError, 'hello', 'replace', 42, 'h')
  493.         self.checkraises(TypeError, 'hello', 'replace', 'h', 42)
  494.  
  495.     
  496.     def test_zfill(self):
  497.         self.checkequal('123', '123', 'zfill', 2)
  498.         self.checkequal('123', '123', 'zfill', 3)
  499.         self.checkequal('0123', '123', 'zfill', 4)
  500.         self.checkequal('+123', '+123', 'zfill', 3)
  501.         self.checkequal('+123', '+123', 'zfill', 4)
  502.         self.checkequal('+0123', '+123', 'zfill', 5)
  503.         self.checkequal('-123', '-123', 'zfill', 3)
  504.         self.checkequal('-123', '-123', 'zfill', 4)
  505.         self.checkequal('-0123', '-123', 'zfill', 5)
  506.         self.checkequal('000', '', 'zfill', 3)
  507.         self.checkequal('34', '34', 'zfill', 1)
  508.         self.checkequal('0034', '34', 'zfill', 4)
  509.         self.checkraises(TypeError, '123', 'zfill')
  510.  
  511.  
  512.  
  513. class MixinStrUnicodeUserStringTest:
  514.     
  515.     def test_islower(self):
  516.         self.checkequal(False, '', 'islower')
  517.         self.checkequal(True, 'a', 'islower')
  518.         self.checkequal(False, 'A', 'islower')
  519.         self.checkequal(False, '\n', 'islower')
  520.         self.checkequal(True, 'abc', 'islower')
  521.         self.checkequal(False, 'aBc', 'islower')
  522.         self.checkequal(True, 'abc\n', 'islower')
  523.         self.checkraises(TypeError, 'abc', 'islower', 42)
  524.  
  525.     
  526.     def test_isupper(self):
  527.         self.checkequal(False, '', 'isupper')
  528.         self.checkequal(False, 'a', 'isupper')
  529.         self.checkequal(True, 'A', 'isupper')
  530.         self.checkequal(False, '\n', 'isupper')
  531.         self.checkequal(True, 'ABC', 'isupper')
  532.         self.checkequal(False, 'AbC', 'isupper')
  533.         self.checkequal(True, 'ABC\n', 'isupper')
  534.         self.checkraises(TypeError, 'abc', 'isupper', 42)
  535.  
  536.     
  537.     def test_istitle(self):
  538.         self.checkequal(False, '', 'istitle')
  539.         self.checkequal(False, 'a', 'istitle')
  540.         self.checkequal(True, 'A', 'istitle')
  541.         self.checkequal(False, '\n', 'istitle')
  542.         self.checkequal(True, 'A Titlecased Line', 'istitle')
  543.         self.checkequal(True, 'A\nTitlecased Line', 'istitle')
  544.         self.checkequal(True, 'A Titlecased, Line', 'istitle')
  545.         self.checkequal(False, 'Not a capitalized String', 'istitle')
  546.         self.checkequal(False, 'Not\ta Titlecase String', 'istitle')
  547.         self.checkequal(False, 'Not--a Titlecase String', 'istitle')
  548.         self.checkequal(False, 'NOT', 'istitle')
  549.         self.checkraises(TypeError, 'abc', 'istitle', 42)
  550.  
  551.     
  552.     def test_isspace(self):
  553.         self.checkequal(False, '', 'isspace')
  554.         self.checkequal(False, 'a', 'isspace')
  555.         self.checkequal(True, ' ', 'isspace')
  556.         self.checkequal(True, '\t', 'isspace')
  557.         self.checkequal(True, '\r', 'isspace')
  558.         self.checkequal(True, '\n', 'isspace')
  559.         self.checkequal(True, ' \t\r\n', 'isspace')
  560.         self.checkequal(False, ' \t\r\na', 'isspace')
  561.         self.checkraises(TypeError, 'abc', 'isspace', 42)
  562.  
  563.     
  564.     def test_isalpha(self):
  565.         self.checkequal(False, '', 'isalpha')
  566.         self.checkequal(True, 'a', 'isalpha')
  567.         self.checkequal(True, 'A', 'isalpha')
  568.         self.checkequal(False, '\n', 'isalpha')
  569.         self.checkequal(True, 'abc', 'isalpha')
  570.         self.checkequal(False, 'aBc123', 'isalpha')
  571.         self.checkequal(False, 'abc\n', 'isalpha')
  572.         self.checkraises(TypeError, 'abc', 'isalpha', 42)
  573.  
  574.     
  575.     def test_isalnum(self):
  576.         self.checkequal(False, '', 'isalnum')
  577.         self.checkequal(True, 'a', 'isalnum')
  578.         self.checkequal(True, 'A', 'isalnum')
  579.         self.checkequal(False, '\n', 'isalnum')
  580.         self.checkequal(True, '123abc456', 'isalnum')
  581.         self.checkequal(True, 'a1b3c', 'isalnum')
  582.         self.checkequal(False, 'aBc000 ', 'isalnum')
  583.         self.checkequal(False, 'abc\n', 'isalnum')
  584.         self.checkraises(TypeError, 'abc', 'isalnum', 42)
  585.  
  586.     
  587.     def test_isdigit(self):
  588.         self.checkequal(False, '', 'isdigit')
  589.         self.checkequal(False, 'a', 'isdigit')
  590.         self.checkequal(True, '0', 'isdigit')
  591.         self.checkequal(True, '0123456789', 'isdigit')
  592.         self.checkequal(False, '0123456789a', 'isdigit')
  593.         self.checkraises(TypeError, 'abc', 'isdigit', 42)
  594.  
  595.     
  596.     def test_title(self):
  597.         self.checkequal(' Hello ', ' hello ', 'title')
  598.         self.checkequal('Hello ', 'hello ', 'title')
  599.         self.checkequal('Hello ', 'Hello ', 'title')
  600.         self.checkequal('Format This As Title String', 'fOrMaT thIs aS titLe String', 'title')
  601.         self.checkequal('Format,This-As*Title;String', 'fOrMaT,thIs-aS*titLe;String', 'title')
  602.         self.checkequal('Getint', 'getInt', 'title')
  603.         self.checkraises(TypeError, 'hello', 'title', 42)
  604.  
  605.     
  606.     def test_splitlines(self):
  607.         self.checkequal([
  608.             'abc',
  609.             'def',
  610.             '',
  611.             'ghi'], 'abc\ndef\n\rghi', 'splitlines')
  612.         self.checkequal([
  613.             'abc',
  614.             'def',
  615.             '',
  616.             'ghi'], 'abc\ndef\n\r\nghi', 'splitlines')
  617.         self.checkequal([
  618.             'abc',
  619.             'def',
  620.             'ghi'], 'abc\ndef\r\nghi', 'splitlines')
  621.         self.checkequal([
  622.             'abc',
  623.             'def',
  624.             'ghi'], 'abc\ndef\r\nghi\n', 'splitlines')
  625.         self.checkequal([
  626.             'abc',
  627.             'def',
  628.             'ghi',
  629.             ''], 'abc\ndef\r\nghi\n\r', 'splitlines')
  630.         self.checkequal([
  631.             '',
  632.             'abc',
  633.             'def',
  634.             'ghi',
  635.             ''], '\nabc\ndef\r\nghi\n\r', 'splitlines')
  636.         self.checkequal([
  637.             '\n',
  638.             'abc\n',
  639.             'def\r\n',
  640.             'ghi\n',
  641.             '\r'], '\nabc\ndef\r\nghi\n\r', 'splitlines', 1)
  642.         self.checkraises(TypeError, 'abc', 'splitlines', 42, 42)
  643.  
  644.     
  645.     def test_startswith(self):
  646.         self.checkequal(True, 'hello', 'startswith', 'he')
  647.         self.checkequal(True, 'hello', 'startswith', 'hello')
  648.         self.checkequal(False, 'hello', 'startswith', 'hello world')
  649.         self.checkequal(True, 'hello', 'startswith', '')
  650.         self.checkequal(False, 'hello', 'startswith', 'ello')
  651.         self.checkequal(True, 'hello', 'startswith', 'ello', 1)
  652.         self.checkequal(True, 'hello', 'startswith', 'o', 4)
  653.         self.checkequal(False, 'hello', 'startswith', 'o', 5)
  654.         self.checkequal(True, 'hello', 'startswith', '', 5)
  655.         self.checkequal(False, 'hello', 'startswith', 'lo', 6)
  656.         self.checkequal(True, 'helloworld', 'startswith', 'lowo', 3)
  657.         self.checkequal(True, 'helloworld', 'startswith', 'lowo', 3, 7)
  658.         self.checkequal(False, 'helloworld', 'startswith', 'lowo', 3, 6)
  659.         self.checkequal(True, 'hello', 'startswith', 'he', 0, -1)
  660.         self.checkequal(True, 'hello', 'startswith', 'he', -53, -1)
  661.         self.checkequal(False, 'hello', 'startswith', 'hello', 0, -1)
  662.         self.checkequal(False, 'hello', 'startswith', 'hello world', -1, -10)
  663.         self.checkequal(False, 'hello', 'startswith', 'ello', -5)
  664.         self.checkequal(True, 'hello', 'startswith', 'ello', -4)
  665.         self.checkequal(False, 'hello', 'startswith', 'o', -2)
  666.         self.checkequal(True, 'hello', 'startswith', 'o', -1)
  667.         self.checkequal(True, 'hello', 'startswith', '', -3, -3)
  668.         self.checkequal(False, 'hello', 'startswith', 'lo', -9)
  669.         self.checkraises(TypeError, 'hello', 'startswith')
  670.         self.checkraises(TypeError, 'hello', 'startswith', 42)
  671.  
  672.     
  673.     def test_endswith(self):
  674.         self.checkequal(True, 'hello', 'endswith', 'lo')
  675.         self.checkequal(False, 'hello', 'endswith', 'he')
  676.         self.checkequal(True, 'hello', 'endswith', '')
  677.         self.checkequal(False, 'hello', 'endswith', 'hello world')
  678.         self.checkequal(False, 'helloworld', 'endswith', 'worl')
  679.         self.checkequal(True, 'helloworld', 'endswith', 'worl', 3, 9)
  680.         self.checkequal(True, 'helloworld', 'endswith', 'world', 3, 12)
  681.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', 1, 7)
  682.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', 2, 7)
  683.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', 3, 7)
  684.         self.checkequal(False, 'helloworld', 'endswith', 'lowo', 4, 7)
  685.         self.checkequal(False, 'helloworld', 'endswith', 'lowo', 3, 8)
  686.         self.checkequal(False, 'ab', 'endswith', 'ab', 0, 1)
  687.         self.checkequal(False, 'ab', 'endswith', 'ab', 0, 0)
  688.         self.checkequal(True, 'hello', 'endswith', 'lo', -2)
  689.         self.checkequal(False, 'hello', 'endswith', 'he', -2)
  690.         self.checkequal(True, 'hello', 'endswith', '', -3, -3)
  691.         self.checkequal(False, 'hello', 'endswith', 'hello world', -10, -2)
  692.         self.checkequal(False, 'helloworld', 'endswith', 'worl', -6)
  693.         self.checkequal(True, 'helloworld', 'endswith', 'worl', -5, -1)
  694.         self.checkequal(True, 'helloworld', 'endswith', 'worl', -5, 9)
  695.         self.checkequal(True, 'helloworld', 'endswith', 'world', -7, 12)
  696.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', -99, -3)
  697.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', -8, -3)
  698.         self.checkequal(True, 'helloworld', 'endswith', 'lowo', -7, -3)
  699.         self.checkequal(False, 'helloworld', 'endswith', 'lowo', 3, -4)
  700.         self.checkequal(False, 'helloworld', 'endswith', 'lowo', -8, -2)
  701.         self.checkraises(TypeError, 'hello', 'endswith')
  702.         self.checkraises(TypeError, 'hello', 'endswith', 42)
  703.  
  704.     
  705.     def test___contains__(self):
  706.         self.checkequal(True, '', '__contains__', '')
  707.         self.checkequal(True, 'abc', '__contains__', '')
  708.         self.checkequal(False, 'abc', '__contains__', '\x00')
  709.         self.checkequal(True, '\x00abc', '__contains__', '\x00')
  710.         self.checkequal(True, 'abc\x00', '__contains__', '\x00')
  711.         self.checkequal(True, '\x00abc', '__contains__', 'a')
  712.         self.checkequal(True, 'asdf', '__contains__', 'asdf')
  713.         self.checkequal(False, 'asd', '__contains__', 'asdf')
  714.         self.checkequal(False, '', '__contains__', 'asdf')
  715.  
  716.     
  717.     def test_subscript(self):
  718.         self.checkequal(u'a', 'abc', '__getitem__', 0)
  719.         self.checkequal(u'c', 'abc', '__getitem__', -1)
  720.         self.checkequal(u'a', 'abc', '__getitem__', 0x0L)
  721.         self.checkequal(u'abc', 'abc', '__getitem__', slice(0, 3))
  722.         self.checkequal(u'abc', 'abc', '__getitem__', slice(0, 1000))
  723.         self.checkequal(u'a', 'abc', '__getitem__', slice(0, 1))
  724.         self.checkequal(u'', 'abc', '__getitem__', slice(0, 0))
  725.         self.checkraises(TypeError, 'abc', '__getitem__', 'def')
  726.  
  727.     
  728.     def test_slice(self):
  729.         self.checkequal('abc', 'abc', '__getslice__', 0, 1000)
  730.         self.checkequal('abc', 'abc', '__getslice__', 0, 3)
  731.         self.checkequal('ab', 'abc', '__getslice__', 0, 2)
  732.         self.checkequal('bc', 'abc', '__getslice__', 1, 3)
  733.         self.checkequal('b', 'abc', '__getslice__', 1, 2)
  734.         self.checkequal('', 'abc', '__getslice__', 2, 2)
  735.         self.checkequal('', 'abc', '__getslice__', 1000, 1000)
  736.         self.checkequal('', 'abc', '__getslice__', 2000, 1000)
  737.         self.checkequal('', 'abc', '__getslice__', 2, 1)
  738.         self.checkraises(TypeError, 'abc', '__getslice__', 'def')
  739.  
  740.     
  741.     def test_mul(self):
  742.         self.checkequal('', 'abc', '__mul__', -1)
  743.         self.checkequal('', 'abc', '__mul__', 0)
  744.         self.checkequal('abc', 'abc', '__mul__', 1)
  745.         self.checkequal('abcabcabc', 'abc', '__mul__', 3)
  746.         self.checkraises(TypeError, 'abc', '__mul__')
  747.         self.checkraises(TypeError, 'abc', '__mul__', '')
  748.         self.checkraises(OverflowError, 10000 * 'abc', '__mul__', 2000000000)
  749.  
  750.     
  751.     def test_join(self):
  752.         self.checkequal('a b c d', ' ', 'join', [
  753.             'a',
  754.             'b',
  755.             'c',
  756.             'd'])
  757.         self.checkequal('abcd', '', 'join', ('a', 'b', 'c', 'd'))
  758.         self.checkequal('w x y z', ' ', 'join', Sequence())
  759.         self.checkequal('abc', 'a', 'join', ('abc',))
  760.         self.checkequal('z', 'a', 'join', UserList([
  761.             'z']))
  762.         if test_support.have_unicode:
  763.             self.checkequal(unicode('a.b.c'), unicode('.'), 'join', [
  764.                 'a',
  765.                 'b',
  766.                 'c'])
  767.             self.checkequal(unicode('a.b.c'), '.', 'join', [
  768.                 unicode('a'),
  769.                 'b',
  770.                 'c'])
  771.             self.checkequal(unicode('a.b.c'), '.', 'join', [
  772.                 'a',
  773.                 unicode('b'),
  774.                 'c'])
  775.             self.checkequal(unicode('a.b.c'), '.', 'join', [
  776.                 'a',
  777.                 'b',
  778.                 unicode('c')])
  779.             self.checkraises(TypeError, '.', 'join', [
  780.                 'a',
  781.                 unicode('b'),
  782.                 3])
  783.         
  784.         for i in [
  785.             5,
  786.             25,
  787.             125]:
  788.             self.checkequal(('a' * i + '-') * i[:-1], '-', 'join', [
  789.                 'a' * i] * i)
  790.             self.checkequal(('a' * i + '-') * i[:-1], '-', 'join', ('a' * i,) * i)
  791.         
  792.         self.checkraises(TypeError, ' ', 'join', BadSeq1())
  793.         self.checkequal('a b c', ' ', 'join', BadSeq2())
  794.         self.checkraises(TypeError, ' ', 'join')
  795.         self.checkraises(TypeError, ' ', 'join', 7)
  796.         self.checkraises(TypeError, ' ', 'join', Sequence([
  797.             7,
  798.             'hello',
  799.             0x7BL]))
  800.  
  801.     
  802.     def test_formatting(self):
  803.         self.checkequal('+hello+', '+%s+', '__mod__', 'hello')
  804.         self.checkequal('+10+', '+%d+', '__mod__', 10)
  805.         self.checkequal('a', '%c', '__mod__', 'a')
  806.         self.checkequal('a', '%c', '__mod__', 'a')
  807.         self.checkequal('"', '%c', '__mod__', 34)
  808.         self.checkequal('$', '%c', '__mod__', 36)
  809.         self.checkequal('10', '%d', '__mod__', 10)
  810.         self.checkequal('\x7f', '%c', '__mod__', 127)
  811.         for ordinal in (-100, 2097152):
  812.             self.checkraises((ValueError, OverflowError), '%c', '__mod__', ordinal)
  813.         
  814.         self.checkequal(' 42', '%3ld', '__mod__', 42)
  815.         self.checkequal('0042.00', '%07.2f', '__mod__', 42)
  816.         self.checkequal('0042.00', '%07.2F', '__mod__', 42)
  817.         self.checkraises(TypeError, 'abc', '__mod__')
  818.         self.checkraises(TypeError, '%(foo)s', '__mod__', 42)
  819.         self.checkraises(TypeError, '%s%s', '__mod__', (42,))
  820.         self.checkraises(TypeError, '%c', '__mod__', (None,))
  821.         self.checkraises(ValueError, '%(foo', '__mod__', { })
  822.         self.checkraises(TypeError, '%(foo)s %(bar)s', '__mod__', ('foo', 42))
  823.         self.checkequal('bar', '%((foo))s', '__mod__', {
  824.             '(foo)': 'bar' })
  825.         self.checkequal(103 * 'a' + 'x', '%sx', '__mod__', 103 * 'a')
  826.         self.checkraises(TypeError, '%*s', '__mod__', ('foo', 'bar'))
  827.         self.checkraises(TypeError, '%10.*f', '__mod__', ('foo', 42.0))
  828.         self.checkraises(ValueError, '%10', '__mod__', (42,))
  829.  
  830.     
  831.     def test_floatformatting(self):
  832.         for prec in xrange(100):
  833.             format = '%%.%if' % prec
  834.             value = 0.01
  835.             for x in xrange(60):
  836.                 value = (value * 3.1415926550000002 / 3.0) * 10.0
  837.                 if x < 50 and prec >= 67:
  838.                     self.checkraises(OverflowError, format, '__mod__', value)
  839.                     continue
  840.                 self.checkcall(format, '__mod__', value)
  841.             
  842.         
  843.  
  844.  
  845.  
  846. class MixinStrStringUserStringTest:
  847.     
  848.     def test_maketrans(self):
  849.         self.assertEqual(''.join(map(chr, xrange(256))).replace('abc', 'xyz'), string.maketrans('abc', 'xyz'))
  850.         self.assertRaises(ValueError, string.maketrans, 'abc', 'xyzw')
  851.  
  852.     
  853.     def test_translate(self):
  854.         table = string.maketrans('abc', 'xyz')
  855.         self.checkequal('xyzxyz', 'xyzabcdef', 'translate', table, 'def')
  856.         table = string.maketrans('a', 'A')
  857.         self.checkequal('Abc', 'abc', 'translate', table)
  858.         self.checkequal('xyz', 'xyz', 'translate', table)
  859.         self.checkequal('yz', 'xyz', 'translate', table, 'x')
  860.         self.checkraises(ValueError, 'xyz', 'translate', 'too short', 'strip')
  861.         self.checkraises(ValueError, 'xyz', 'translate', 'too short')
  862.  
  863.  
  864.  
  865. class MixinStrUserStringTest:
  866.     
  867.     def test_encoding_decoding(self):
  868.         codecs = [
  869.             ('rot13', 'uryyb jbeyq'),
  870.             ('base64', 'aGVsbG8gd29ybGQ=\n'),
  871.             ('hex', '68656c6c6f20776f726c64'),
  872.             ('uu', 'begin 666 <data>\n+:&5L;&\\@=V]R;&0 \n \nend\n')]
  873.         for encoding, data in codecs:
  874.             self.checkequal(data, 'hello world', 'encode', encoding)
  875.             self.checkequal('hello world', data, 'decode', encoding)
  876.         
  877.         
  878.         try:
  879.             import zlib
  880.         except ImportError:
  881.             pass
  882.  
  883.         data = 'x\x9c\xcbH\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x1a\x0b\x04]'
  884.         self.checkequal(data, 'hello world', 'encode', 'zlib')
  885.         self.checkequal('hello world', data, 'decode', 'zlib')
  886.         self.checkraises(TypeError, 'xyz', 'decode', 42)
  887.         self.checkraises(TypeError, 'xyz', 'encode', 42)
  888.  
  889.  
  890.  
  891. class MixinStrUnicodeTest:
  892.     
  893.     def test_bug1001011(self):
  894.         t = self.type2test
  895.         
  896.         class subclass(t):
  897.             pass
  898.  
  899.         s1 = subclass('abcd')
  900.         s2 = t().join([
  901.             s1])
  902.         self.assert_(s1 is not s2)
  903.         self.assert_(type(s2) is t)
  904.         s1 = t('abcd')
  905.         s2 = t().join([
  906.             s1])
  907.         self.assert_(s1 is s2)
  908.         if t is unicode:
  909.             s1 = subclass('abcd')
  910.             s2 = ''.join([
  911.                 s1])
  912.             self.assert_(s1 is not s2)
  913.             self.assert_(type(s2) is t)
  914.             s1 = t('abcd')
  915.             s2 = ''.join([
  916.                 s1])
  917.             self.assert_(s1 is s2)
  918.         elif t is str:
  919.             s1 = subclass('abcd')
  920.             s2 = u''.join([
  921.                 s1])
  922.             self.assert_(s1 is not s2)
  923.             self.assert_(type(s2) is unicode)
  924.             s1 = t('abcd')
  925.             s2 = u''.join([
  926.                 s1])
  927.             self.assert_(s1 is not s2)
  928.             self.assert_(type(s2) is unicode)
  929.         else:
  930.             self.fail('unexpected type for MixinStrUnicodeTest %r' % t)
  931.  
  932.  
  933.